package org.dromara.business.service;

import org.dromara.business.domain.vo.UserInfoWebExtVo;
import org.dromara.business.domain.vo.UserInfoWebVo;
import org.dromara.business.domain.bo.UserInfoWebBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.system.domain.vo.UserInfoVo;

import java.util.Collection;
import java.util.List;

/**
 * 用户附加信息Service接口
 *
 * @author Hao Tong Xue
 * @date 2025-04-03
 */
public interface IUserInfoService {

    /**
     * 查询用户附加信息
     *
     * @param id 主键
     * @return 用户附加信息
     */
    UserInfoWebVo queryById(Long id);

    /**
     * 分页查询用户附加信息列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 用户附加信息分页列表
     */
    TableDataInfo<UserInfoWebVo> queryPageList(UserInfoWebBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的用户附加信息列表
     *
     * @param bo 查询条件
     * @return 用户附加信息列表
     */
    List<UserInfoWebVo> queryList(UserInfoWebBo bo);

    /**
     * 新增用户附加信息
     *
     * @param bo 用户附加信息
     * @return 是否新增成功
     */
    Boolean insertByBo(UserInfoWebBo bo);

    /**
     * 修改用户附加信息
     *
     * @param bo 用户附加信息
     * @return 是否修改成功
     */
    Boolean updateByBo(UserInfoWebBo bo);

    /**
     * 校验并批量删除用户附加信息信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 获取用户信息
     * @return 用户信息
     */
    UserInfoWebVo getInfo();

    /**
     * 添加硬币
     * @param userId 用户id
     * @param type 类型
     * @param coinNum 硬币数量
     */
    void addCoin(Long userId, int type, Integer coinNum);

    /**
     * 添加经验
     * @param userId 用户id
     * @param type 类型
     * @param experienceNum 经验数量
     */
    void addLevelExperience(Long userId, int type, Integer experienceNum);

    /**
     * 获取用户卡片信息
     * @param uId 用户id
     *
     * @return 用户信息
     */
    UserInfoWebVo getCardUInfo(Long uId);

    /**
     * 获取用户附加扩展信息
     * @param uId 用户ID
     * @return 用户扩展信息
     */
    UserInfoWebExtVo getUserInfoExt(Long uId);
}
